home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-05-20 | 998 b | 61 lines | [TEXT/CWIE] |
- unit MyTermination;
-
- interface
-
- uses
- Types;
-
- type
- TermProcType = procedure;
-
- procedure InitTermination(term:TermProcType);
- procedure FinishTermination;
-
- implementation
-
- uses
- Traps,MyCallProc,MyUtils,PreserveA5;
-
- var
- gTermination:TermProcType;
- gExitToShell:UniversalProcPtr;
-
- procedure CallTermination;
- var
- tmp:TermProcType;
- begin
- if gTermination<>nil then begin
- tmp:=gTermination;
- gTermination:=nil;
- tmp();
- end;
- end;
-
- procedure ExitToShellPatch;
- var
- olda5:Ptr;
- lExitToShell:UniversalProcPtr;
- begin
- olda5:=SetPreservedA5;
- CallTermination;
- lExitToShell:=gExitToShell;
- RestoreA5(olda5);
- CallPascal0(lExitToShell);
- end;
-
- procedure InitTermination(term:TermProcType);
- begin
- gTermination:=term;
- if term<>nil then begin
- gExitToShell:=MyGetTrapAddress(_ExitToShell);
- MySetTrapAddress(NewProc(@ExitToShellPatch,uppPascal0ProcInfo),_ExitToShell);
- end;
- end;
-
- procedure FinishTermination;
- begin
- CallTermination;
- end;
-
- end.
-